Monitoring the performance of a processing system in real time is an important design goal. For example, real time performance monitoring can reveal bottlenecks and provide insight into utilization of bandwidth and resources of the processing system. Some techniques for performance monitoring utilize benchmarks to compare metrics like bandwidth, latencies, etc., of transactions executed by the processing system. Software mechanisms may be used to measure latencies of the transactions at specified time intervals and the measured latencies may be logged for analysis. Hardware mechanisms such as the use of system timers and counters within a processor core may also be used for gathering information about transactions, such as average latencies, overall minimum/maximum latencies, etc. Tracing mechanisms (e.g., Embedded Trace Macrocell (ETM)) which may be used for debugging, can provide real time information regarding the execution flow of transactions.
However, while the above mechanisms seek to provide general information regarding the overall performance of a processing system, it is difficult to discern performance information regarding specific transactions. For example, while combinations of the above-mentioned software and hardware mechanisms can indicate that broad sections of application code may be inefficient, it is difficult to pinpoint problematic transactions with more specificity. On the other hand, while the tracing mechanisms can provide more detailed information about the processing system which can be collected and analyzed, effectively using this information real time may involve prohibitively large amounts of data to be gathered and processed within very small windows of time.
Accordingly, there is a need in the art for systems and methods which can provide real time and detailed performance metrics regarding particular transactions.